
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>HotSpot GC的分类 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>HotSpot GC的分类 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">串行垃圾收集器（Serial GC）的主要特点是什么？它最适合在什么样的环境中使用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">串行垃圾收集器（Serial GC）的主要特点是：1. 单线程执行垃圾回收；2. 实现简单，开销低。它最适合在单核处理器或低内存环境中使用。</div>
          </div>
          <div class="card-source">来源: 1. 串行垃圾收集器（Serial GC）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">并行垃圾收集器（Parallel GC）的核心设计目标是什么？它如何通过其工作机制实现这一目标？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">并行垃圾收集器（Parallel GC）的核心设计目标是提高应用程序的吞吐量。它通过使用多个线程并行进行垃圾收集来实现这一目标，从而减少了垃圾收集所占用的总时间，提高了在多核处理器上的性能。</div>
          </div>
          <div class="card-source">来源: 2. 并行垃圾收集器（Parallel GC）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">并发标记-清除垃圾收集器（CMS）的工作过程包含哪四个主要阶段？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">CMS 的工作过程包含四个主要阶段：1. 初始标记（Initial Mark）；2. 并发标记（Concurrent Mark）；3. 重新标记（Remark）；4. 并发清除（Concurrent Sweep）。</div>
          </div>
          <div class="card-source">来源: 3. 并发标记-清除垃圾收集器（Concurrent Mark-Sweep, CMS）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">CMS 垃圾收集器虽然以低延迟为目标，但它存在哪些主要缺点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">CMS 垃圾收集器的主要缺点包括：1. 可能导致老年代产生内存碎片；2. 在并发标记和清除阶段需要消耗额外的 CPU 资源。</div>
          </div>
          <div class="card-source">来源: 3. 并发标记-清除垃圾收集器（Concurrent Mark-Sweep, CMS）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Garbage-First (G1) 垃圾收集器是如何解决内存碎片问题的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">G1 垃圾收集器通过将堆内存划分为多个区域，并根据优先级进行回收。在回收过程中，它能够进行高效的内存整理，从而解决了内存碎片问题。</div>
          </div>
          <div class="card-source">来源: 4. Garbage-First（G1）垃圾收集器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">G1 垃圾收集器的回收过程主要包括哪几个步骤？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">G1 垃圾收集器的回收过程主要包括四个步骤：1. 初始标记（标记根对象）；2. 并发标记（并发标记存活对象）；3. 最终标记（修正并发标记期间的变化）；4. 回收（根据回收目标选择回收区域）。</div>
          </div>
          <div class="card-source">来源: 4. Garbage-First（G1）垃圾收集器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Z Garbage Collector (ZGC) 的核心设计目标是什么？为了实现这个目标，它有什么样的资源开销？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ZGC 的核心设计目标是提供几乎零停顿的极低延迟垃圾回收，适用于大规模内存应用。为了实现这一目标，它的一个缺点是需要更多的内存资源（高内存开销）来支持其高效的垃圾回收操作。</div>
          </div>
          <div class="card-source">来源: 5. Z Garbage Collector（ZGC）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">ZGC 和 Shenandoah GC 在减少停顿时间方面有何共同之处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ZGC 和 Shenandoah GC 的共同之处在于它们都采用了并发回收的策略。它们都能够在应用程序运行的同时并发地执行标记、整理（压缩）和回收等核心操作，从而极大地减少了应用程序的停顿时间。</div>
          </div>
          <div class="card-source">来源: 5. Z Garbage Collector（ZGC） 和 6. Shenandoah Garbage Collector</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在选择垃圾收集器时，如果应用的首要目标是“吞吐量”，应优先考虑哪款收集器？如果首要目标是“低延迟”，有哪些收集器可供选择？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">如果应用的首要目标是“吞吐量”，应优先考虑并行垃圾收集器（Parallel GC）。如果首要目标是“低延迟”，则可以考虑 CMS、G1、ZGC 或 Shenandoah 等垃圾收集器。</div>
          </div>
          <div class="card-source">来源: 2. 并行垃圾收集器（Parallel GC）、3. 并发标记-清除垃圾收集器（CMS）、4. Garbage-First（G1）、5. Z Garbage Collector（ZGC）、6. Shenandoah Garbage Collector</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
